package com.zhhtech.zhh.api.core.annotation;


import com.zhhtech.zhh.api.core.base.IResult;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * @author zhoucl
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestConfig {
    /**
     * 默认重试次数
     */
    int DEFAULT_RETRY_COUNT = 1;
    /**
     * 默认重试间隔
     */
    int DEFAULT_RETRY_INTERVAL = 0;

    /**
     * 返回结果类型
     * 1.如果返回结果实现了IResult接口这会处理code
     * 2.如果想要返回值就是具体的泛型值则配置一下返回结果class
     */
    Class<? extends IResult> resultClz() default IResult.class;

    /**
     * 是否校验返回code
     */
    boolean checkResultCode() default true;

    /**
     * 是否直接获取data
     */
    boolean resultGetData() default true;

    /**
     * 错误重试次数
     */
    int retryCount() default DEFAULT_RETRY_COUNT;

    /**
     * 重试间隔
     */
    int retryInterval() default DEFAULT_RETRY_INTERVAL;

    /**
     * 重试间隔单位
     */
    TimeUnit unit() default TimeUnit.MILLISECONDS;
}
